package day1223;

public class Test3Triangle2 {
    public static void main(String[] args) {
        //1.本案例打印4行的杨辉三角，所以是4行七列的二维数组(二维数组的每个小数组有7个空间)
        int[][] all=new int[4][7];
        //2.for循环执行4次，用来给二维数组存入4行元素  for(int i=0;;){
            //3.用此内循环来给二维数组存入 4个，3个，2个，1个空格(具体效果如下)(空格用整数32表示)
            //{
            //  {空格,空格,空格,空格,  ....省略....},
            //  {空格,空格,空格,  ........省略....}
            //  {空格,空格,  ............省略....}
            //  {空格,  ................省略....}
            // }
            int j = 0;
            //for (;;) {
            //   给二维数组的第i行第j列存储空格 32。
            //}




            //用变量flag来控制本行的位置是应该放入空格还是数字
            char flag='空';
            //注意：此内循环的循环变量从j开始，因为上边的内循环已经将本行杨辉三角左边的空格存到二维数组中了，得接着存入数字了
            //所以循环变量得接着上边的内循环的循环变量变化(比如第0行： 上边内循环已经给第0,1,2,3四个位置存储了空格，
            // 这个内循环该给二维数组中的第4位存数字1了)
            //for ( int n = j; ; j++) {
                //如果当前位置(第i行第j列的元素)处于杨辉三角的左右两条边的位置，就存入整数1
                //if(j==n || j == n+2*i){
                         //本行代码给二维数组中的杨辉三角左侧存储1，效果如下
                        //  {空格,空格,空格,空格,1 ........省略....},
                        //  {空格,空格,空格,1......1......省略....}
                        //  {空格,空格,1.............1....省略....}
                        //  {空格, 1....................1省略....}


                //else-if的条件是：
                //n<j && j < n+2*i : 表示当前的数字不是杨辉三角的左右两条边的数字时
                //i!=0表示当前不是第一行(第一行的数字不需要用上一行的两个元素相加来计算,第一行是一个固定值1)
                //当本行的位置不是存1(不属于杨辉三角的左右两条边时，用变量flag来控制本行的位置是应该放入空格还是数字)
                //}else if(){
                    //flag的值是'空，就给二维数组对应的位置存入空格(所以flag最先存储'空'，所以最先符合if，就存入空格32)
                    //并将flag置为 '非'  (表示下一次应该给这个位置的下一位存数字<非空格>)
                    //if(flag=='空'){
                        //本行代码给二维数组存储杨辉三角形中间的所有空格，效果如下(三角形中间的6个空格)：
                        //  {空格,空格,空格,空格,1 ........省略....},
                        //  {空格,空格,空格,1.空格..1......省略....}
                        //  {空格,空格,1.空格.....空格.1....省略....}
                        //  {空格, 1.空格...空格.....空格.1省略....}
                        flag='非';
                    //flag的值是'非'，就给二维数组对应的位置存入一个计算表达式all[i][j]=all[i-1][j-1]+all[i-1][j+1];
                    //并将flag置为 '空'  (表示下一次应该给这个位置的下一位存空格)
                    //}else{
                        //本行代码给二维数组存储杨辉三角形中间的所有非1的数字(杨辉三角左右两条边之外的所有数字)，效果如下
                        //(三角形中间的)：
                        //本行代码给二维数组存储杨辉三角形中间的所有空格，效果如下(三角形中间 第2行的2和第三行的 3,3)：
                        //  {空格,空格,空格,空格,1 ........省略....},
                        //  {空格,空格,空格,1.空格..1......省略....}
                        //  {空格,空格,1.空格..2..空格.1....省略....}
                        //  {空格, 1.空格.3.空格...3.空格.1省略....}
                        flag='空';
                    //}
                //}
        //外循环的右括号。


        //下边打印二维数组的每个元素的代码已经给出，请自己理解下
        /*for (int i = 0; i < all.length; i++) {
            for (int  ele:  all[i] ) {
                System.out.print( ele==32 ? " " :   (ele==0? " ": ele) );
            }
            System.out.println();
        }*/

    }
}




//   public static void main(String[] args) {
//        int[][] all=new int[4][7];
//        for (int i = 0; i < all.length; i++) {
//            int j = 0;
//            for (  ; j < all.length-1-i; j++) {
//                all[i][j]=32;
//            }
//
//            char flag='空';
//            for ( int n = j; j <= n+2*i; j++) {
//
//            //for ( int n = j; j <= n+3; j++) {
//                //System.out.print(n+",");
//                //if(j==n || j==j*2+2*i){
//                if(j==n || j == n+2*i){
//                    all[i][j]=1;
//                }else if(n<j && j < n+2*i  &&  i!=0){
//                //                             i!=0是第一行的数字不需要用上一行的两个元素相加来计算(第一行是一个固定值1)
//                    if(flag=='空'){
//                        all[i][j]=32;
//                        flag='非';
//                    }else{
////                        System.out.println(flag+"-not null-");
//                        all[i][j]=all[i-1][j-1]+all[i-1][j+1];
//                        flag='空';
//                    }
//                }
//            }
//        }
//
//        for (int i = 0; i < all.length; i++) {
//            for (int  ele:  all[i] ) {
//                System.out.print( ele==32 ? " " :   (ele==0? " ": ele) );
//            }
//            System.out.println();
//        }
//
//    }










//    public static void main(String[] args) {
//        char[][]  poems={
//                {'离','离','原','上','草'}   ,
//                {'一','岁','一','枯','荣'}
//        };
//        System.out.println(poems[0][1]); //离
//        System.out.println(poems[0][3]); //上
//        System.out.println(poems[1][4]); //荣
//        System.out.println(poems.length);//大数组poems的长度
//    }


